package com.wfx.service.impl;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wfx.entity.*;
import com.wfx.mapper.WxbGoodsSpecMapper;
import com.wfx.mapper.WxbGoodsSpecOptionsMapper;
import com.wfx.mapper.WxbGoodsTemplateMapper;


import com.wfx.service.IWxbGoodsSpecService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;

import java.util.Map;


/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author zhu
 * @since 2021-01-21
 */
@Service
public class WxbGoodsSpecServiceImpl extends ServiceImpl<WxbGoodsSpecMapper, WxbGoodsSpec> implements IWxbGoodsSpecService {

    @Autowired(required = false)
    private WxbGoodsSpecMapper wxbGoodsSpecMapper;

    @Autowired
    private WxbGoodsSpecOptionsMapper wxbGoodsSpecOptionsMapper;


    @Autowired
    private WxbGoodsTemplateMapper wxbGoodsTemplateMapper;

    @Autowired
    private ObjectMapper objectMapper;


    //查询+条件和分页
    public PageResult search(PageDTO<WxbGoodsSpec> page) {
        IPage iPage = new Page<>(page.getPage(), page.getLimit());
        IPage search = wxbGoodsSpecMapper.search(iPage, page.getData());
        PageResult pageResult = new PageResult<>();
        pageResult.setSuccess(true);
        pageResult.setPages(search.getPages());
        pageResult.setData(search.getRecords());
        pageResult.setTotal(search.getTotal());
        pageResult.setMsg("查询成功");
        return pageResult;
    }

    //删除
    @Override
    public Result del(List<WxbGoodsSpec> data) {
        for (WxbGoodsSpec datum : data) {
            int del = wxbGoodsSpecMapper.del(datum.getId());
            return new Result(true, "删除成功");
        }
        return null;
    }


    //添加
    @Override
    public Result saveSpec(WxbGoodsSpec wxbGoodsSpec) {
        int i = wxbGoodsSpecMapper.saveSpce(wxbGoodsSpec);
        WxbGoodsSpec wxbGoodsSpec1 = new WxbGoodsSpec();
        wxbGoodsSpec1.setSpecName(wxbGoodsSpec.getSpecName());
        Wrapper<WxbGoodsSpec> wrapper = new QueryWrapper<>(wxbGoodsSpec1);
        List<WxbGoodsSpec> wxbGoodsSpecs = wxbGoodsSpecMapper.selectList(wrapper);
        Integer id = wxbGoodsSpecs.get(0).getId();
        System.out.println(id);
        System.out.println(wxbGoodsSpec.getOptions());
        for (WxbGoodsSpecOptions datum : wxbGoodsSpec.getOptions()) {
            datum.setSpecId(id);
            int insert = wxbGoodsSpecOptionsMapper.insert(datum);
        }
        return new Result(true, "添加成功");
    }


    //修改
    @Override
    public Result up(WxbGoodsSpec wxbGoodsSpec) {
        if (!StringUtils.isEmpty(wxbGoodsSpec.getId())) {
            int i = wxbGoodsSpecMapper.updateById(wxbGoodsSpec);
            for (WxbGoodsSpecOptions datum : wxbGoodsSpec.getOptions()) {
                QueryWrapper<WxbGoodsSpecOptions> queryWrapper = new QueryWrapper<>(datum);

                int update = wxbGoodsSpecOptionsMapper.updateById(datum);
            }
        }
        return new Result(true,"修改成功");
    }

    @Override
    public List<WxbGoodsSpec> select(List<String> specList) {
        List<WxbGoodsSpec> wxbGoodsSpecs = new ArrayList<>();
        for (String s : specList) {
            WxbGoodsSpec wxbGoodsSpec = wxbGoodsSpecMapper.selectById(s);
            wxbGoodsSpecs.add(wxbGoodsSpec);
        }
        return wxbGoodsSpecs;
    }


    @Override
    public List<Map> findSpecAndOptionsBytid(String tid) {
        //1.根据模板id获取模板信息
        WxbGoodsTemplate template = wxbGoodsTemplateMapper.selectById(tid);
        //2.解析模板关联的规格信息
        String specJson = template.getSpec();
        try {
            List<Map> list = objectMapper.readValue("["+specJson+"]", List.class);
            for (Map map : list) {
                //3.遍历，根据规格id获取规格信息
                Object specId =  map.get("id");
                QueryWrapper<WxbGoodsSpecOptions> wrapper = new QueryWrapper();
                wrapper.eq("spec_id",specId);
                List<WxbGoodsSpecOptions> options = wxbGoodsSpecOptionsMapper.selectList(wrapper);
                map.put("options",options);
            }
            return list;
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;

    }


}
